/**
 * @description 格式化数据库中取出的信息
 * @method 印明帝
 */
const { DEFAULT_PICTURE,REG_FOR_AT_WHO } = require('../conf/constant')
const {  format } = require('date-fns')
/** 
 * 格式化用户头像
 * @method _formatUserPicture
 * @param {Object} user 
 * @returns {Object}
 */
function _formatUserPicture(user) {
  if(user.picture === null) {
    user.picture = DEFAULT_PICTURE 
  }
  return user
}
/**
 * 格式化用户信息
 * @method formatUser
 * @param {Array|Object} users 
 */
function formatUser(users) {
  if(users == null) {
    return null
  }
  if(users instanceof Array) {
    return users.map(_formatUserPicture)
  }

  return _formatUserPicture(users)
}

/**
 * 格式化博客数据
 * @method formatBlogs
 * @param {Object} blogs 
 * @returns {Object}
 */
function formatBlogs(data) {
  
  let formatData = {}
  // 博客列表
  let blogs = data.rows
  // 遍历blogs
  if(blogs instanceof Array) {
    formatData.blogs = blogs.map(formatBlog)
    formatData.isEmpty = formatData.blogs.length === 0
  } else {

  }
  // 博客总页数
  formatData.count = data.count
  // 博客是否为空
  return formatData
}
/**
 * 格式化单个blog数据
 * @method formatBlogs
 * @param {Object} blog 
 * @returns {Object}
 */
function formatBlog(blog) {
  let newBlog = {}
  // 获取blog
  newBlog = blog.dataValues
  // 获取blog的user
  newBlog.user = formatUser(blog.dataValues.user)
  // 格式化时间
  let date = new Date(blog.dataValues.createdAt)
  newBlog.createdDate =  format(date,'MM.dd HH:mm')
  // 格式化内容
  newBlog.htmlContent = formatBlogContent(blog.content)
  return newBlog
}
/**
 * 格式化单个blog 内容数据
 * @method formatBlogContent
 * @param {Object} content  内容
 * @returns {String}
 */
function formatBlogContent(content) {
  content = content.replace(REG_FOR_AT_WHO,(matchStr,nickName,id) => {
    return `<a href="/profile/${id}">@${nickName}</a>`
  })
  return content
}

module.exports = {
  formatUser,
  formatBlogs,
  formatBlogContent
}